/*
 * 该程序是一个主进程和子进程使用信号进行同步的实例，
 * 首先使用fork函数创建一个子进程，然后在主进程中使用sleep函数每隔一秒调用kill函数向子进程发送一个用户自定义信号SIGUSR1；
 * 子进程则使用signal函数对用户自定义信号SIGUSR1进行注册，使用signalUSR1Deal函数来对信号进行处理，
 * 在函数中输出了当前的时间信息
 * */

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <time.h>

// 这是USR1的信号处理函数，用于在屏幕上输出时间信息
void signalDeal(int iSig){
	// 定义时间参数，用来获取时间
	time_t timeval;

	if(iSig == SIGUSR1){
		// 获得当前的时间参数
		time(&timeval);
		// 在屏幕上输出当前时间
		printf("%s", ctime(&timeval));
	}

}

int main(int argc, char *argv[]){
	pid_t pid;

	pid = fork();

	if(pid == -1){
		printf("创建子进程失败!\n");
		exit(1);
	}else if(pid != 0){
		while(1){
			// 在父进程中使用sleep,每隔1秒调用kill函数向子进程发送一个用户子定义信号
			sleep(1);

			if(kill(pid,SIGUSR1) == -1){
				printf("向子进程发送SIGUSR1失败!\n");
				exit(1);
			}
		}
	}else{
		// 此时为子进程,注册SIGUSR1信号
		signal(SIGUSR1, signalDeal);
		while(1){ }
	}
	
	return 0;
}


